home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Seq / MIDIFile.h < prev    next >
C/C++ Source or Header  |  2005-03-14  |  2KB  |  91 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   MIDIFile.h - MIDI file loader
  5.   Copyright (C) 2003-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #ifndef MIDIFILE_H
  24. #define MIDIFILE_H
  25.  
  26. #include "../globals.h"
  27. #include "MIDIEvents.h"
  28.  
  29. class MIDIFile{
  30.     public:
  31.     MIDIFile();
  32.     ~MIDIFile();
  33.     
  34.     //returns -1 if there is an error, otherwise 0
  35.     int loadfile(char *filename);
  36.     
  37.     //returns -1 if there is an error, otherwise 0
  38.     int parsemidifile(MIDIEvents *me_);
  39.     
  40.     private:
  41.     MIDIEvents *me;    
  42.     
  43.     unsigned char *midifile;
  44.     int midifilesize,midifilek;
  45.     bool midieof;
  46.  
  47.     //returns -1 if there is an error, otherwise 0
  48.     int parsetrack(int ntrack);
  49.     
  50.     void parsenoteoff(char ntrack,char chan,unsigned int dt);
  51.     void parsenoteon(char ntrack,char chan,unsigned int dt);
  52.     void parsecontrolchange(char ntrack,char chan,unsigned int dt);
  53.     void parsepitchwheel(char ntrack,char chan, unsigned int dt);
  54.     void parsemetaevent(unsigned char mtype,unsigned char mlength);
  55.  
  56.     void add_dt(char ntrack, unsigned int dt);
  57.     
  58.     void clearmidifile();
  59.  
  60.     //convert the delta-time to internal format 
  61.     unsigned int convertdt(unsigned int dt);    
  62.     
  63.     /* Low Level MIDIfile functions */
  64.     
  65.     //get a byte from the midifile
  66.     unsigned char getbyte();
  67.  
  68.     //peek the current byte from the midifile
  69.     unsigned char peekbyte();
  70.     
  71.     //get a set of 4 bytes from the midifile
  72.     unsigned int getint32();
  73.     
  74.     //get a word of 2 bytes from the midifile
  75.     unsigned short int getint16();
  76.  
  77.     //read a variable length quantity
  78.     unsigned int getvarint32();    
  79.  
  80.     //skip some bytes
  81.     void skipnbytes(int n);
  82.  
  83.     struct {
  84.         double tick;//how many seconds one tick has
  85.         
  86.     }data;
  87.     
  88. };
  89.  
  90. #endif
  91.